﻿using System.Web;
using System.Text;
using System.IO;
using System.Net;
using System;
using System.Collections.Generic;
using System.Xml;


namespace Com.Allscore
{
    /// <summary>
    /// 类名：Service
    /// 功能：商银信各接口构造类
    /// 详细：构造商银信各接口请求参数
    /// 版本：1.0
    /// 修改日期：2011-12-20
    /// 说明：
    /// 以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。
    /// 该代码仅供学习和研究商银信接口使用，只是提供一个参考
    /// 
    /// 要传递的参数要么不允许为空，要么就不要出现在数组与隐藏控件或URL链接里。
    /// </summary>
    public class Service
    {
        #region 字段
        //商户ID
        private string _merchantId = "";
        //字符编码格式
        private string _input_charset = "";
        //终端号
        private string _terminalId = "";
        //页面跳转同步返回页面文件路径

        private string _notify_url = "";

        //网关消费请求地址
        private string _allscore_gateway_url = "";

        //网关查询请求地址
        private string _allscore_query_url = "";

        //网关退货地址(纯银行卡支付)
        private string _allscore_partrefund_url = "";
        
        //网关退货地址(快捷和帐户)
        private string _allscore_refund_url = "";


        #endregion

        /// <summary>
        /// 构造函数
        /// 从配置文件及入口文件中初始化变量
        /// </summary>
        public Service()
        {

            _input_charset = Config.Input_charset.Trim();
            _notify_url = Config.Notify_url.Trim();

            _allscore_gateway_url = Config.Allscore_gateway_url.Trim();
            _allscore_query_url = Config.Allscore_query_url.Trim();
            _allscore_partrefund_url = Config.Allscore_partrefund_url.Trim();
            _allscore_refund_url = Config.Allscore_refund_url.Trim();
            
        }

               
        public string allscorePay(SortedDictionary<string, string> sParaTemp)
        {
            //添加 商银信支付 

            sParaTemp.Add("inputCharset", Config.Input_charset);

            string strButtonValue = "商银信支付";
            string strHtml = "";
            try
            {
                //构造表单提交HTML数据    Allscore_Gateway_QuickPa  是连接地址 商银信地址
                strHtml = Submit.BuildFormHtml(sParaTemp, _allscore_gateway_url, "post", strButtonValue);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return strHtml;
        }


        public string allscoreCommonPay(SortedDictionary<string, string> sParaTemp)
        {
            //添加 商银信支付 

            sParaTemp.Add("inputCharset", Config.Input_charset);

            string strButtonValue = "商银信支付";
            string strHtml = "";
            try
            {

                //构造表单提交HTML数据    Allscore_Gateway_QuickPa  是连接地址 商银信地址
                strHtml = Submit.BuildFormHtml(sParaTemp, _allscore_gateway_url, "post", strButtonValue);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return strHtml;
        }


        public string orderQuery(SortedDictionary<string, string> sParaTemp)
        {
            //添加 商银信支付 

            sParaTemp.Add("inputCharset", Config.Input_charset);

            string strButtonValue = "订单查询";
            string strHtml = "";
            try
            {

                //构造表单提交HTML数据    Allscore_Gateway_QuickPa  是连接地址 商银信地址
                strHtml = Submit.BuildFormHtml(sParaTemp, _allscore_query_url, "post", strButtonValue);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return strHtml;
        }

        public string refundOrder(SortedDictionary<string, string> sParaTemp)
        {
            //退款 商银信支付 

            //sParaTemp.Add("inputCharset", Config.Input_charset);

            string strButtonValue = "退款";
            string strHtml = "";
            try
            {

                //构造表单提交HTML数据    Allscore_Gateway_QuickPa  是连接地址 商银信地址
                strHtml = Submit.BuildFormHtml(sParaTemp, _allscore_partrefund_url, "post", strButtonValue);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return strHtml;
        }

        /// <summary>
        /// 构造提交地址
        /// </summary>
        /// <param name="sParaTemp">请求参数集合</param>
        /// <returns>表单提交URL地址</returns>
        public string createUrl(SortedDictionary<string, string> sParaTemp)
        {
            //增加基本配置
            sParaTemp.Add("service", "directPay");
            sParaTemp.Add("merchantId", _merchantId);
            sParaTemp.Add("inputCharset", _input_charset);
            sParaTemp.Add("terminalId", _terminalId);
            sParaTemp.Add("notifyUrl", _notify_url);


            //表单提交地址
            string strURL = "";

            //构造表单提交HTML数据
            strURL = Submit.BuildRequestUrl(sParaTemp);

            return _allscore_gateway_url + strURL;
        }



        //******************若要增加其他商银信接口，可以按照下面的格式定义******************//
        /// <summary>
        /// 构造(商银信接口名称)接口
        /// </summary>
        /// <param name="sParaTemp">请求参数集合</param>
        /// <returns>表单提交HTML文本或者商银信返回XML处理结果</returns>
        public string AllscoreInterface(SortedDictionary<string, string> sParaTemp)
        {
            //增加基本配置

            //表单提交HTML数据变量
            string strHtml = "";


            //构造请求参数数组


            //构造给商银信处理的请求
            //请求方式有以下三种：
            //1.构造表单提交HTML数据:Submit.BuildFormHtml()
            //2.构造模拟远程HTTP的POST请求，获取商银信的返回处理结果:Submit.SendPostInfo()
            //3.构造模拟远程HTTP的GET请求，获取商银信的返回处理结果:Submit.SendGetInfo()
            //请根据不同的接口特性三选一


            return strHtml;
        }
    }
}